﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Beeldbankmvc.ViewModels;

namespace Beeldbankmvc.Models
{
    public class OrderRepository
    {
        BeeldbankLinqDataContext db = new BeeldbankLinqDataContext();

        public IQueryable<BEELDBANK_ORDER> FindAll()
        {
            return db.BEELDBANK_ORDERs;
        }

        public IEnumerable<OrderViewModel> getSortedOrders()
        {
            return from o in FindAll()
                   orderby o.BestelDatum descending
                   select new OrderViewModel
                   {
                       Id = o.Id,
                       User = o.createdby,
                       OrderPrice = o.TotaalPrijs.Value,
                       OrderNumber = o.OpdrachtNr,
                       Purpose = o.Gebruik,
                       OrderDate = o.BestelDatum,
                       Comment = o.Opmerkingen
                   };
        }

        public IEnumerable<OrderViewModel> getSortedOrdersByTimeFrame(DateTime fromDate, DateTime toDate)
        {
            return from o in FindAll()
                   where o.BestelDatum > fromDate && o.BestelDatum < toDate
                   orderby o.BestelDatum descending
                   select new OrderViewModel {
                       Id = o.Id,
                       User = o.createdby,
                       OrderPrice = o.TotaalPrijs.Value,
                       OrderNumber = o.OpdrachtNr,
                       Purpose = o.Gebruik,
                       OrderDate = o.BestelDatum,
                       Comment = o.Opmerkingen
                   };
        }

        public OrderViewModel FindOne(int id)
        {
            BEELDBANK_ORDER order = db.BEELDBANK_ORDERs.SingleOrDefault(m => m.Id == id);

            OrderViewModel model = null;

            if (order != null)
            {
                model = new OrderViewModel();
                model.Id = order.Id;
                model.User = order.createdby;
                model.OrderDate = order.BestelDatum;
                model.OrderNumber = order.OpdrachtNr;
                model.OrderPrice = order.TotaalPrijs.Value;
                model.Purpose = order.Gebruik;
                model.Comment = order.Opmerkingen;
            }

            return model;
        }

        public IQueryable<BEELDBANK_ORDERREGEL> FindAllOrderRegels()
        {
            return db.BEELDBANK_ORDERREGELs;
        }

        public IEnumerable<BEELDBANK_ORDERREGEL> FindAllItemsFromOrder(int id)
        {
            return from r in FindAllOrderRegels()
                   where r.OrderId == id
                   select r;
        }

        public void Delete(int id)
        {
            BEELDBANK_ORDER theOne = FindAll().Where(p => p.Id == id).First();

            db.BEELDBANK_ORDERs.DeleteOnSubmit(theOne);
        }

        public void Save()
        {
            db.SubmitChanges();
        }

    }
}